﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
//类型：内置类型
//      自定义类型（数组，结构体，枚举，联合体）
// 结构是一些值的集合，这些值被称为成员。每个成员可以是不同的类型的变量
// 数组：是一组相同类型的元素的集合
//
//
//
//



//声明了一个结构体类型
//struct Stu
//{
//	//1个或多个结构体成员 - 但是用来表述学生的
//	char name[20];
//	int age;
//	char id[11];
//	float score;
//	//.....
//} s6, s7, s8;//全局变量
//struct Stu s4;
//struct Stu s5;//全局变量
//
//int main()
//{
//	int num = 0;
//	struct Stu s1 = {"zhagsan", 20, "2024010102", 85.5f};
//	struct Stu s2 = { .age = 18 , .name="wangcai",.score=95.5f,.id=2025010102};
//	struct Stu s3;//局部变量
//
//	return 0;
//}


//struct Peo
//{
//	char name[30];
//	int age;
//	char tele[12];
//
//};
//
//struct Ebook
//{
//	struct Peo data[100];//可以放100个人的信息
//	int count;//当前已经存放的个数
//};
//int main()
//{
//	struct Peo p1 = { "zhangsan", 20, "15988665252" };
//	struct Ebook eb = { {{"wangwu", 19, "13966554455"},{"chuihua", 18, "159988776655"}},0 };
//	/*printf("%s\n", p1.name);
//	printf("%d\n", p1.age);
//	printf("%s\n", p1.tele);*/
//
//	printf("%s\n", eb.data[1].name);
//	printf("%d\n", eb.data[1].age);
//	printf("%s\n", eb.data[1].tele);
//	//.时候结构成员访问操作符
//	//结构体变量.结构体成员
//
//
//
//	return 0;
//}



// 操作符的属性：优先级、结合性
//C语⾔的操作符有2个重要的属性：优先级、结合性，这两个属性决定了表达式求值的计算顺序。
//10.1 优先级

//优先级指的是，如果⼀个表达式包含多个运算符，哪个运算符应该优先执⾏。各种运算符的优先级是不⼀样的。
// 结合性:如果两个运算符优先级相同，优先级没办法确定先计算哪个了，这时候就看结合性了，则根据运算符是左结合，还是右结合，决定执⾏顺序。⼤部分运算符是左结合（从左到右执⾏），少数运算符是右结合（从右到左执⾏），⽐如赋值运算符（=)


//
//int main()
//{
//	int a = 100;
//	long c = 100l;
//	long long b = 100ll;
//	float f = 3.14f;
//
//	return 0;
// 



//整型提升
//c语言中整型算术运算总是至少以缺省（默认）整型类型的精度来计算
//表达式中的字符和短整型操作数在使用前转换为普通整型，这个转化叫做整型提升
//有符号整数提升是按照变量的数据类型的符号位来提升的
//⽆符号整数提升，⾼位补0
//int main()
//{
//	//char类型的取值范围是-128~127
//	//本来就存不下140
//	char a = 20; //截断后存进a
//	//000000000000000000000000000100100
//	//00010 0100 - a
//	char b = 120;
//	//000000000000000000000000001111000
//	//01111000 - b
//
//	char c = a + b;
//	//000100100 - a
//	//000000000000000000000000000100100
//	//01111000 - b
//	//000000000000000000000000001111000
//	//000000000000000000000000000010100
//	//000000000000000000000000010001100
//	//10001100 - c
//	//
//	printf("%d\n", c);
//	//%d - 以十进制的形式，打印一个有符号的整形（int）
//    //111111111111111111111111110001100 - 补码
//	//100000000000000000000000001110011
//	//100000000000000000000000001110100 - 原码
//	//-116
//	return 0;
//}

//算术转换
//两个操作符的操作数属于不同类型，无法进行操作，除非其中一个操作数转换成另一个操作数的类型



//错误事例






//#include <stdio.h>
//
//
//int fun()
//{
//	static int count = 1;
//	return ++count;//先++后使用
//}
////2 3 4
//int main()
//{
//	int answer;
//	answer = fun() - fun() * fun();
//	
//	printf("%d\n", answer);//输出多少？
//	return 0;
//}
//


//错误示例



//#include <stdio.h> 
//int main() 
//{
//	int i = 1;
//	int ret = (++i) + (++i) + (++i);
//
//	printf("%d\n", ret);
//	printf("%d\n", i);
//	return 0;
//}
//



//指针

//内存单元的编号 == 地址 == 指针
//2.21分钟在休息

